Коллекции (составные типы данных): list (список)
Определения
Список - набор данных, где данные можно извлечь по индексу (номеру, но от 0) в списке.Можно представлять список по-разному - например, как
- набор записей на листе; записи можно вычеркивать или добавлять новые.
- составной стол в кафе/ресторане, который получают сдвигая столики для новых посетителей. Каждый столик из составного имеет свой индекс (первый столик имеет индекс 0, второй - 1 и т.д.). Можно попросить что-то со столика под индексом 0, но если например столиков 5, а попросить со столика с индексом 7 (которого нет, он был бы, если бы столиков было хотя бы 8), то будет ошибка. Так же попытка отнести что-то на столик с индексом 7 вызовет падение блюда на пол :(
- Шкафчик с набором проиндексированных полок, где можно добавлять/вытаскивать полки (правда у списка может быть сколько угодно "полок").
Примеры
Создание списка и добавление к нему элементов
В примере ниже мы создадим два списка - пустой и с несколькими именами, потом проверим их длину, добавим несколько элементов (добавлять будем собственной функцией списка .append(...)
).
Длина списка
Длину списка можно узнать с помощью встроенной в Python функции len(список)
.
imena = ["Андрей", "Борис", "Валентина", "Эмиль", "Юля", "Яша"]
print(len(imena))
# Вывод программы: 6
cisla = []
print(len(cisla))
# Вывод программы: 0
imena.append('Ярослав')
print(imena)
# Вывод программы: ['Андрей', 'Борис', 'Валентина', 'Эмиль', 'Юля', 'Яша', 'Ярослав']
print(len(imena))
# Вывод программы: 7
cisla.append(1)
cisla.append(10)
print(cisla)
# Вывод программы: [1, 10]
print(len(cisla))
# Вывод программы: 2
Добавление к списку элементов других списков
Чтобы изменить первоначальный список, используется функция .extend(...)
- она ничего не возвращает!
Если же мы хотим создать новый список - используем оператов сложения +
:
cisla = [1,2,4,6,8,9]
eshio_cisla=[4,2,31,3]
# Поменяем сами cisla:
cisla.extend(eshio_cisla)
print(cisla)
# Вывод программы: [1, 2, 4, 6, 8, 9, 4, 2, 31, 3]
cisla.extend([14,15,1513])
print(cisla)
# Вывод программы: [1, 2, 4, 6, 8, 9, 4, 2, 31, 3, 14, 15, 1513]
imena_zhenskie = ["Александра", "Беата", "Василиса"]
imena_muzhskie = ["Андрей", "Борис", "Виктор"]
# Создадим новый список из двух
imena = imena_zhenskie + imena_muzhskie
print(imena)
# Вывод программы: ['Александра', 'Беата', 'Василиса', 'Андрей', 'Борис', 'Виктор']
# А теперь
print(len(imena))
# Вывод программы: 6
cisla = []
print(len(cisla))
# Вывод программы: 0
imena.append('Ярослав')
print(imena)
# Вывод программы: ['Александра', 'Беата', 'Василиса', 'Андрей', 'Борис', 'Виктор', 'Ярослав']
print(len(imena))
# Вывод программы: 7
cisla.append(1)
cisla.append(10)
print(cisla)
# Вывод программы: [1, 10]
print(len(cisla))
# Вывод программы: 2
Извлечение элементов списка через индексы
В языках программирования нумерация идет 0, т.е. если вы хотите получить 1-ый элемент, надо вписать индекс 0
, если 2-ой - индекс 1
и т.д. Номер называется индексом. Элемент извлекается с обращением к списку через квадратные скобки - список[индекс]
.
Так же в Python'e можно извлекать элементы с конца, даже не зная, какова длина списка: последний элемент - с индексом -1
, предпоследний - -2
и т.д.
imena = ["Андрей", "Борис", "Валентина", "Эмиль", "Юля", "Яша"]
imia = imena[1]
print(imia)
# Вывод программы: Борис
dlina_spiska = len(imena)
print(imena[dlina_spiska-1]) # последний элемент имеет индекс длина - 1
# Вывод программы: Яша
print(imena[-1]) # то же самое!
# Вывод программы: Яша
Как удалять элементы из списка
Для этого подходят собственные функции списка .pop(...)
и .remove(...)
:
pop(индекс)
- удаляет последний элемент списка с данным индексом и одновременно его возвращает; если не вписать индекс, удалит последний элемент списка;remove(значение)
- удаляет значение из списка, если оно есть в списке (а если нет, программа закончится с ошибкой!) - она ничего не возвращает!
imena = ["Андрей", "Борис", "Валентина", "Эмиль", "Юля", "Яша"]
poslednee_imia = imena.pop()
print(imena)
# Вывод программы: ['Андрей', 'Борис', 'Валентина', 'Эмиль', 'Юля']
print(poslednee_imia)
# Вывод программы: Яша
imena.pop()
print(imena)
# Вывод программы: ['Андрей', 'Борис', 'Валентина', 'Эмиль']
imena.remove('Борис')
print(imena)
# Вывод программы: ['Андрей', 'Валентина', 'Эмиль']
imena.pop(0)
print(imena)
# Вывод программы: ['Валентина', 'Эмиль']
Извлечение частей списка в новые списки по индексам
Если мы хотим получить новый список например из скольких-то первых/последних значений, или от индекса до индекса, то обычно используется синтаксис список[начало:конец]
, так, что будут взяты элементы с индексами в интервале
начало
- индекс первого элемента, который будет взят в список. Если пропустить, то Python вставит значение0
.конец
- индекс последнего элемента, который уже не будет взят в список. Если пропустить, то Python вставит значениеlen(список)
.
cisla = [1,2,3,4,5,6,7,8,9]
pervye_5 = cisla[:5]
print(pervye_5)
# Вывод программы: [1, 2, 3, 4, 5]
poslednie_5 = cisla[-5:]
print(poslednie_5)
# Вывод программы: [5, 6, 7, 8, 9]
ot_3_ego_po_6_nomer = cisla[2:6]
print(ot_3_ego_po_6_nomer)
# Вывод программы: [3, 4, 5, 6]
ot_2ogo_do_predposlednego = cisla[1:-1]
print(ot_2ogo_do_predposlednego)
# Вывод программы: [2, 3, 4, 5, 6, 7, 8]
Разворот списка
Если хотим развернуть сам начальный список - для этого есть собств. функц. списка .reverse()
.
Если хотим получить новый список, где элементы развернуты, надо писать список[::-1]
, здесь последний парамет - это шаг. Это сокращенный вариант полного синтаксиса список[начало:конец:шаг]
. Здесь двоеточия два, чтобы сказать Python'у, что индексы начало
и конец
пропущены (перед первым :
пусто, между первым и вторым тоже).
cisla = [1,2,3,4,5,6,7,8,9]
naoborot = cisla[::-1]
print(cisla) # не поменялся
# Вывод программы: [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(naoborot) # развернутый
# Вывод программы: [9, 8, 7, 6, 5, 4, 3, 2, 1]
pervye_5_naoborot = cisla[:5][::-1]
print(pervye_5_naoborot)
# Вывод программы: [5, 4, 3, 2, 1]
poslednie_5_naoborot = cisla[-5:][::-1]
print(poslednie_5_naoborot)
# Вывод программы: [9, 8, 7, 6, 5]
# А теперь развернем сам список
cisla.reverse()
print(cisla)
# Вывод программы: [9, 8, 7, 6, 5, 4, 3, 2, 1]
Фильтрация списков по значениям
Короткий способ для простых условий
Для примера, мы положим в один новый список только те цифры, которые больше 5, а в другой - те, которые меньше 0:
cisla = [12, 57, 17, 2, 4, 12, -2, -351, 3, 5, 8]
cisla_bolshe_5 = [x for x in cisla if x > 5]
print(cisla_bolshe_5)
# Вывод программы: [12, 57, 17, 12, 8]
cisla_menshe_0 = [x for x in cisla if x < 0]
print(cisla_menshe_0)
# Вывод программы: [-2, -351]
Фильтрация списков по значениям
Длинный способ для более сложных операций
cisla = [12, 57, 17, 2, 4, 12, -2, -351, 3, 5, 8]
# сначала создаем пустые списки, которые будем заполнять
cisla_bolshe_5_i_deliashiesia_na_2 = []
cisla_menshe_0 = []
# a % b - остаток от деления a на b
for x in cisla:
if x > 5 and x % 2 == 0:
cisla_bolshe_5_i_deliashiesia_na_2.append(x)
if x < 0:
cisla_menshe_0.append(x)
print(cisla_bolshe_5_i_deliashiesia_na_2)
# Вывод программы: [12, 12, 8]
print(cisla_menshe_0)
# Вывод программы: [-2, -351]
Вопросы
Что будет выведено экран после запуска данного кода?
imena = ["Геннадий", "Даниил", "Екатерина", "Зинаида", "Ирина"]
imena.pop(1)
print(imena)
imena.remove("Ира")
print(imena)